$(document).ready(function(){
    /**
     * DOC主页获取目录的html字符串
     * @param cate array 数据库中保存的目录数据
     * @param id int 文档ID
     * @param fun string 功能，可选值：'d' 和 'e'，分别表示展示目录，和编辑目录
     * @returns {string}
     */
    function getDocCate(cate, id, fun){
        var str = '<ul>';
        for(var i in cate){
            str += '<li><a href="/'+fun+'/'+id+'/c/'+cate[i]['id']+'" cid="'+cate[i]['id']+'">'+cate[i]['name']+'</a>';
            if(cate[i]['child']){
                str += getDocCate(cate[i]['child'], id, fun);
            }
            str += '</li>';
        }
        str += '</ul>';
        return str;
    }
    /**
     * 给文档主页的目录设置数字镖标号
     * @param condition
     */
    function setDocCount(condition){
        if($(condition).length){
            var btext = '';
            $(condition).each(function(){
                btext = $(this).parent().prev().children('b').length ? $(this).parent().prev().children('b').text() : '';
                $(this).children('a').prepend('<b>'+btext+($(this).index()+1)+'.</b> ');
            });
            condition += '>ul>li';
            setDocCount(condition);
        }
    }
    /**
     * 获取修改目录时生成的新的html字符串
     * @param cate string 目录字符串
     * @param $count int 为1表示最外层的ul，为0表示内层的ul
     * @returns {string}
     */
    function getChangeCate(cate, $count){
        var str = $count == 1 ? '<ul class="cate_editing cateEditing" id="cateEditing">' : '<ul>';
        for(var i in cate){
            str += '<li><a href="javascript:void(0)" cid="'+cate[i]['id']+'"><b class="cate_mark">'+cate[i]['name']+'</b><span class="addBtn">+</span><span class="deleteBtn">-</span><span class="resetBtn">/</span></a>';
            if(cate[i]['child']){
                str += getChangeCate(cate[i]['child'], 0);
            }else{
                str += '<ul></ul>';
            }
            str += '</li>';
        }
        str += '</ul>';
        return str;
    }
    /**
     * 将修改之后的目录转化成数据库保存的string
     * @param el string
     * @returns {Array}
     */
    function getCateString(el){
        var arr = [];
        for(var i = 0; i < $(el + '>li').length; i ++){
            arr[i] = {
                'id' : parseInt($(el + '>li:eq("' + i + '")>a').attr('cid')),
                'name' : $(el + '>li:eq("' + i + '")>a>b').text()
            };
            if($(el + '>li:eq(' + i + ')>ul>li').length){
                arr[i].child = getCateString(el + '>li:eq(' + i + ')>ul');
            }
        }
        return arr;
    }

    var eCateBox = $('#cateBox'), eLoad = $('#load'), eTitle = $('#editTitle');
    var oldCate = '', cateString = '';
    // 生成目录、添加目录序号、更新编辑区标题
    if(cate){   // cate 存在时才进行一下操作
        cateString = getDocCate(cate, did, 'e');
    }
    eCateBox.append(cateString+'<a href="javascript:void(0)" class="catep_btn special_btn" id="editCateBtn">编辑目录</a>');
    var eCur = eCateBox.find('a[cid="'+ cid +'"]');
    if(eCur.length){
        eCur.addClass('act');
        eTitle.text(eCur.text());
    }
    setDocCount('#cateBox>ul>li');

    // 修改目录按钮事件
    eCateBox.on('click', '#editCateBtn', function(e){
        e.preventDefault();
        oldCate = eCateBox.html();        // 保存旧的目录html字符串
        eCateBox.html(getChangeCate(cate, 1)+'<a href="javascript:void(0)" class="catep_btn" id="okCateBtn">确定修改</a><a href="javascript:void(0)" class="catep_btn special_btn" id="noCateBtn">取消</a>');
        $('#cateEditing').after('<a href="javascript:void(0)" class="catep_btn" id="newCateBtn">+ 新的章节.</a>');
        var group = $('ul.cateEditing').sortable({
            group: 'cateEditing',
            delay: 500,
            onDrop: function ($item, container, _super) {
                _super($item, container);
            }
        });
    });
    // 目录中的新增、修改、删除功能按钮
    eCateBox.on('click', '.addBtn', function(){
        $(this).parent().next('ul').append('<input type="text" class="addInput" />').find('input').focus();
    });
    eCateBox.on('click', '.deleteBtn', function(){
        if(confirm('您是否确认要删除该章节?')){
            // if($(this).parent().parent().parent().children('li').length==1)
            //     $(this).parent().parent().next('a.add-btn2').remove();
            $(this).parent().parent().remove();
        }
    });
    eCateBox.on('click', '.resetBtn', function(){
        var eResetB = $(this).parent().find('b');
        var newName = prompt('请输入新的标题', eResetB.text());
        if(newName){
            eResetB.text(newName);
        }
    });
    eCateBox.on('click','#newCateBtn',function(e){
        e.preventDefault();
        $('#cateEditing').append('<input type="text" class="addInput" />').find('.addInput').focus();
    });
    // addInput 事件
    eCateBox.on('keypress', '.addInput', function(e){
        if(e.keyCode == "13") $(this).blur();
    });
    eCateBox.on('blur', '.addInput', function(){
        if($(this).val()){
            var str = '<li><a href="javascript:void(0)" cid="'+(++count)+'"><b class="cate_mark">'+$(this).val()+'</b><span class="addBtn">+</span><span class="deleteBtn">-</span><span class="resetBtn">/</span></a><ul></ul></li>';
            $(this).after(str);
        }
        $(this).remove();
    });
    // 确认按钮
    eCateBox.on('click', '#okCateBtn', function(){
        if(confirm('请问您是否确认保存当前编辑的目录？\n如果确认保存，文档将会应用当前编辑的新目录！')){
            eLoad.removeClass('hide');
            cate = getCateString('#cateEditing');
            $.post('/doc/updatecate.html', {
                did : did,
                data : JSON.stringify(cate),
                count : count
            }, function(res){
                var ressult = JSON.parse(res);
                if(ressult.code == 200){
                    // setTip('目录保存成功！！！');
                    // 重新生成目录、添加目录序号、更新编辑区标题
                    eCateBox.html('<li><a href="/e/'+did+'.html" cid="0"> 写在前面</a></li>'+getDocCate(cate, did, 'e')+'<a href="javascript:void(0)" class="catep_btn special_btn" id="editCateBtn">编辑目录</a>');
                    eCur = eCateBox.find('a[cid="'+ cid +'"]');
                    if(eCur.length){
                        eCur.addClass('act');
                        eTitle.text(eCur.text());
                    }
                    setDocCount('#cateBox>ul>li');
                }else{
                    alert('保存目录出错，请稍后再试！');
                    eCateBox.html(oldCate);
                }
                eLoad.addClass('hide');
            });
        }
    });
    eCateBox.on('click', '#noCateBtn', function(e){
        e.preventDefault();
        eCateBox.html(oldCate);
    });
});